[レポート]Builders' session「サーバーレスの考え方でアプリケーションを構築する」に参加してきました。#SVS204
こんにちは。中村です。
本記事は Builders' session「Write less code: Building applications with a serverless mindset」 の参加レポートになります。
概要
Building with a serverless mindset focuses on business value. You can derive more value by using built-in integrations between AWS services set up through configuration than by writing glue code. This hands-on session explores patterns for using direct service integrations using Amazon API Gateway, AWS Step Functions, and Amazon EventBridge. Discover the efficiency of utilizing configuration to streamline development tasks, and push the heavy lifting to AWS. You must bring your laptop to participate.
[機械翻訳]
サーバーレスの考え方に基づく開発は、ビジネス価値に焦点を当てています。接続用のコードを書くよりも、AWS サービス間の設定による組み込み統合機能を活用する方が、より大きな価値を生み出すことができます。このハンズオンセッションでは、Amazon API Gateway、AWS Step Functions、Amazon EventBridgeを使用したサービス間の直接統合パターンを探ります。設定を活用して開発タスクを効率化し、重い処理をAWSに任せる効率性を体験してください。参加にはラップトップの持参が必要です。
スピーカー
- Roman Boiko
- Wang Jinghui
- Shani Adadi Kazaz
- Uri Segev
- Alexander Vladimirov
レベル
- 200
内容
概要
はじめに、Step Functionsでステートマシンを作成します。
ここで作成したステートマシーンを下記2パターンで呼び出してみます。
- API Gateway
- EventBridge Pipe
これらの呼び出し方法を学ぶことで、接続用のコードを個別に書く必要はなく、サーバレスのメリットを活かした開発を実施します。
※私がセッション中に作業できたのが、Step Functionsの作成までになります。2パターンは概要のみお伝えします。
前提
ワークショップでは、進行をスムーズに進めるために、事前に準備したCloudFormationを利用してStep FunctionsやIAMロールが作成されていました。
実際に手元で検証する際は、このあたりを自身で準備する必要があります。
やってみた
- AWS Step Functions State machineを作成する
ワークフローからAmazon Translateを呼び出して、翻訳するステートマシンを作成してみます。
「TranslateText」を作成し、翻訳のAPI実行が成功するか試してみます。
成功しました!
次に、入力値を変数として保存する設定を行います。
このように設定することで出力値だけでなく、入力値も保存することが可能になります。
実行した結果を確認してみます。
続いて、Step FunctionsからDynamoDBを読み込む設定をします。
DBを統合することで、入出力値を保管できる様にする訳ですね。
また、保存する際には主キーとして一意な値を利用したいため、組み込みの「$hash()」関数を利用します。
設定を保存して再度実行し、
Step Functionsの結果と、DynamoDBに保存された値を確認してみます。
できましたね。
ただ現状の構成だと、都度翻訳を実施する処理となります。
よく考えると、既に翻訳した言葉は再度翻訳する必要はありませんね。
そのため、過去に翻訳した実績があるかどうかを確認する処理を追加します。
セッションで提示いただいた下記コードを利用して上書きします。
{
"StartAt": "Get translated text from DynamoDB",
"States": {
"Get translated text from DynamoDB": {
"Type": "Task",
"Resource": "arn:aws:states:::dynamodb:getItem",
"Arguments": {
"TableName": "TranslationTable",
"Key": {
"id": {
"S": "{% $hash($states.input[0].Text, 'SHA-1') %}"
}
}
},
"Next": "Check if text was translated",
"Assign": {
"OriginalText": "{% $states.input[0].Text %}"
}
},
"Check if text was translated": {
"Type": "Choice",
"Choices": [
{
"Next": "Map Data to Output",
"Condition": "{% $exists($states.input.Item) %}"
}
],
"Default": "TranslateText"
},
"Map Data to Output": {
"Type": "Pass",
"End": true,
"Output": {
"TranslatedText": "{% $states.input.Item.TranslatedText.S %}"
}
},
"TranslateText": {
"Type": "Task",
"Arguments": {
"SourceLanguageCode": "EN",
"TargetLanguageCode": "DE",
"Text": "{% $OriginalText %}"
},
"Resource": "arn:aws:states:::aws-sdk:translate:translateText",
"Next": "Put Translated Text in DynamoDb"
},
"Put Translated Text in DynamoDb": {
"Type": "Task",
"Resource": "arn:aws:states:::dynamodb:putItem",
"Arguments": {
"TableName": "TranslationTable",
"Item": {
"id": {
"S": "{% $hash($OriginalText, 'SHA-1') %}"
},
"OriginalText": {
"S": "{% $OriginalText %}"
},
"TranslatedText": {
"S": "{% $states.input.TranslatedText %}"
}
}
},
"End": true,
"Output": {
"TranslatedText": "{% $states.input.TranslatedText %}"
}
}
},
"QueryLanguage": "JSONata"
}
先ほど実行した内容であるため、Checkタスクによって、条件分岐され、既存の翻訳結果が利用されていることがわかります。
ここまでで、StepFunctionsの作成まで完了しました。
※1時間のワークショップで、メモをしながら作業をしていたため、時間内にできたのはここまででした。
以下、後続のハンズオンの概要をお伝えします。
- API Gatewayと統合する
統合機能を利用してStep Functionsを統合します。
ポイントは、マッピングテンプレートを利用して、ステートマシンのArnを指定することで通信先を確定させます。
- EventBridge Pipeを利用してStep Functionsを実行する。
事前に作成したSQSをパイプのソースとして利用して、ターゲットにStep Functionsを指定します。
上記二つの統合パターンについて、画面をぽちぽちするだけで簡単に作成できそうです。
感想
クラウドのメリットを最大限活かすために、マネージドサービスを活用してサーバレスな環境を構築しました。
作成したリソースではほとんどコードを記述していないため、開発スピードも上がるのではないかと期待ができます。
実現したいことがマネージドサービスの組み込み機能を利用して実現できる場合は、積極的に活用していきたいと思うようなセッションとなりました。